package com.tianji.learning.service;

import com.tianji.common.domain.dto.PageDTO;
import com.tianji.common.domain.query.PageQuery;
import com.tianji.learning.domain.dto.LearningPlanDTO;
import com.tianji.learning.domain.po.LearningLesson;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tianji.learning.domain.vo.LearningLessonVO;
import com.tianji.learning.domain.vo.LearningPlanPageVO;

import java.util.List;

/**
 * <p>
 * 学生课程表 服务类
 * </p>
 *
 * @author fx
 * @since 2024-08-20
 */

public interface ILearningLessonService extends IService<LearningLesson> {

    /**
     * 01 根据userId批量添加课程 到课表中（day02 -- 随堂练习-01）
     *
     * @param userId
     * @param courseIds
     */
    void addLessons(Long userId, List<Long> courseIds);

    /**
     * 02 根据userId  分页查询我的课程列表（day02 -- 随堂练习-02）
     *
     * @param pageQuery
     * @return
     */
    PageDTO<LearningLessonVO> pageQueryMyLessons(PageQuery pageQuery);


    /**
     * 03 查询用户正在学习的课表 （day02 - 作业 - 01）
     *
     * @return
     */
    LearningLessonVO queryCurrentLesson();

    /**
     * 04 根据courseId查询课程的学习状态（day02 - 作业 - 02）
     *
     * @param courseId
     * @return
     */
    LearningLessonVO queryLessonById(Long courseId);

    /**
     * 05 根据courseId删除课程（day02 - 作业 - 03）
     *
     * @param courseId
     * @return
     */
    void deleteCourseFromLesson(Long userId,Long courseId);

    /**
     * 06 根据courseId查询学习人数（day02 - 作业 - 04）
     *
     * @param courseId
     * @return
     */
    Integer countLearningLessonByCourse(Long courseId);

    /**
     * 07 根根据courseId 查询是否是当前用户课表中的有效课程（day02 - 作业 - 05）
     * 如果用户未登录，返回false
     * 如果用户登录 true 表示有效，false 表示无效
     *
     * @param courseId
     * @return
     */
    Long isLessonValid(Long courseId);

    /**
     * 08 根据userId和courseId查询课表信息（day03-随堂-01）
     * @param userId
     * @param courseId
     * @return
     */
    LearningLesson queryLessonByUserIdAndCourseId(Long userId, Long courseId);

    /**
     * 09 创建学习计划（day03-随堂-03）
     * @param planDTO
     */
    void createPlans(LearningPlanDTO planDTO);

    /**
     * 10 查询学习计划（day03-随堂-04）
     * @param pageQuery
     * @return
     */
    LearningPlanPageVO queryMyPlans(PageQuery pageQuery);
}
